package a_collection.map;

import java.util.*;

/**
 * description:123
 * author: xiaoxu
 * createTime: 2018-11-21 7:31
 **/
public class MapDemo {

    public static void main(String[] args) {
        myHashMap();
    }

    //HashMap

    /**
     * 实现原理：了解即可
     * 		数组+链表+二叉树（红黑树） 1.8
     * 		初始数组长度为16（1<<4）
     * 		默认加载因子DEFAULT_LOAD_FACTOR=0.75，数组75%的空间被存储满了，
     * 			会开辟新空间，更换更大空间为原来2倍的数组，重新散列原来的数据。
     * 	存储方式
     * 		根据key的hash值对16取余数，根据余数决定对象在数组空间的存储位置
     * 		存储的数据量越大，性能表现越明显
     * 	线程不安全，时候单线程使用
     */
    private static void myHashMap() {
        Map<Integer, String> hashMap = new HashMap<Integer, String>();
        /**
         * 添加元素 h.p
         * put(key,value) key键  value值
         */
        //----------key----value---
        hashMap.put(123, "苍老师");
        hashMap.put(0, "gd");
        /**
         * 获取元素 h.g 回车 .var
         *get(key) 通过key获取value值
         */
        //-------value-------------key
        String value0 = hashMap.get(0);
        System.out.println(value0);
        /**
         * lambda 表达式，jdk1.8+ 才能使用
         * 遍历  ()->执行语句
         */
        hashMap.forEach(
                (key, value) -> System.out.println(key + "-->" + value)
        );

        System.out.println("-------------hashMap.keySet()------------");
        Set<Integer> keySet = hashMap.keySet();
        for (Integer key : keySet) {
            System.out.println(key);
        }
        System.out.println("-------------hashMap.values()------------");
        Collection<String> values = hashMap.values();
        for (String value : values) {
            System.out.println(value);
        }
        System.out.println("-------------hashMap.entrySet()------------");
        Set<Map.Entry<Integer, String>> entrySet = hashMap.entrySet();
        for (Map.Entry<Integer, String> entry : entrySet) {
            System.out.println(
                    "Key-->" + entry.getKey() + "  " +
                            "value-->" + entry.getValue());
        }

    }

    //LinkedHashMap
    private static void linkedHashMap() {
        Map<Integer, String> linkedHashMap = new LinkedHashMap<>();

        linkedHashMap.put(1, "2");
        linkedHashMap.put(2, "3");

        String s = linkedHashMap.get(2);
        System.out.println(s);
        linkedHashMap.forEach((key, value) -> System.out.println(key + "-->" + value));


    }
    //TreeMap

}
